use std::cmp::Ordering;

/// 检查两个字符串是否相等（区分大小写）
///
/// # 参数
/// - `string1`: 第一个字符串引用
/// - `string2`: 第二个字符串引用
///
/// # 返回值
/// 相等返回 true，否则返回 false
pub fn string_equal(string1: &str, string2: &str) -> bool {
    string1 == string2
}

/// 执行区分大小写的字符串比较
///
/// # 参数
/// - `string1`: 第一个字符串引用
/// - `string2`: 第二个字符串引用
///
/// # 返回值
/// 返回符合C风格比较结果的整型值
pub fn string_compare(string1: &str, string2: &str) -> i32 {
    match string1.cmp(string2) {
        Ordering::Less => -1,
        Ordering::Equal => 0,
        Ordering::Greater => 1
    }
}

/// 执行不区分大小写的字符串比较
///
/// # 参数
/// - `string1`: 第一个字符串引用
/// - `string2`: 第二个字符串引用
///
/// # 返回值
/// 返回符合C风格比较结果的整型值
pub fn string_nocase_compare(string1: &str, string2: &str) -> i32 {
    for (c1, c2) in string1.chars().zip(string2.chars()) {
        let cmp = c1.to_ascii_lowercase().cmp(&c2.to_ascii_lowercase());
        if cmp != Ordering::Equal {
            return match cmp {
                Ordering::Less => -1,
                Ordering::Greater => 1,
                _ => 0
            };
        }
    }
    
    match string1.len().cmp(&string2.len()) {
        Ordering::Less => -1,
        Ordering::Equal => 0,
        Ordering::Greater => 1
    }
}

/// 检查两个字符串是否相等（不区分大小写）
///
/// # 参数
/// - `string1`: 第一个字符串引用
/// - `string2`: 第二个字符串引用
///
/// # 返回值
/// 相等返回 true，否则返回 false
pub fn string_nocase_equal(string1: &str, string2: &str) -> bool {
    string_nocase_compare(string1, string2) == 0
}
